package io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 * 对象流
 * java.io.ObjectInputStream和ObjectOutputStream
 *
 * 对象流是一对高级流,在流连接中的作用是进行对象的序列化与反序列化
 * 对象序列化:将一个对象转换为一组可以用于保存或网络传输的字节的过程
 *
 */
public class OOSDemo {
    public static void main(String[] args) throws IOException {
        /*
            将一个Person对象写入文件person.obj中保存

            Person对象--------->序列化---------->文件保存
               内存         对象转换为字节         硬盘
         */
        String name = "王克晶";
        int age = 18;
        char gender = '女';
        String[] otherInfo = {"嗓门大","黑","技术好","你们的启蒙老师","漂亮"};
        Person p = new Person(name,age,gender,otherInfo);
        System.out.println(p);

        //文件输出流(低级流):将数据(2进制的字节)写入文件
        FileOutputStream fos = new FileOutputStream("person.obj");

        //对象输出流(高级流):将写出的对象转换为一组字节(序列化)
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        /*
            对象输出流提供的重要方法:
            void writeObject(Object obj)
            将给定的对象进行序列化后将对应的字节在通过其连接的流写出

            注意:
            该方法要求待序列化的对象必须实现接口:java.io.Serializable
            否则序列化时会抛出下面异常:
            java.io.NotSerializableException: io.Person

         */
        oos.writeObject(p);
        System.out.println("写出完毕!");

        oos.close();

    }
}







